/* Fenil Chandarana Fab Academy 2022 Webpage link: https://fabacademy.org/2022/labs/vigyanashram/students/fenil-chandarana/ */ #include #include #include #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // #include Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); const char* ssid = "Fenil"; const char* password = "876543210"; #define trigPin 5 #define echoPin 18 String serverName = "https://api.thingspeak.com/update?api_key=KXT7RSRLUV3Y6HKO"; //unsigned long lastTime = 0; //unsigned long timerDelay = 60000; int led1 = 16; int led2 = 17; //int water = 7; int p = 0; int x = 0; int check = 0; int m = 0; int y = 0; int rst1 =34; int rst2 =35; int rstcheck1 = 0; int rstcheck2 = 0; int flag1 = 0; int flag2 = 0; int plug1 = 1; int plug2 = 1; void sendData(); void setup() { Serial.begin(115200); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(rst1, INPUT); pinMode(rst2, INPUT); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(100); WiFi.begin(ssid, password); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); } void loop() { //if ((millis() - lastTime) > timerDelay) { if(WiFi.status()== WL_CONNECTED){ int k; int l; sendData(); if (x>k || y>l){ HTTPClient http; String url = serverName + "&field1=" + x + "&field2=" + y; delay(500); k=k+5; l=l+5; http.begin(url.c_str()); int httpResponseCode = http.GET(); if (httpResponseCode > 0){ Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); }else{ Serial.print("Error code: "); Serial.println(httpResponseCode); } http.end(); } } else { Serial.println("WiFi Disconnected"); } //lastTime = millis(); } //} void sendData(){ long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration / 2) / 29.1; delay(100); int i = 0; for (i = 0; i < 50; i++) { //after which cycle resets check = digitalRead(14); rstcheck1 = digitalRead(rst1); rstcheck2 = digitalRead(rst2); if (check == 0 && distance > 100) // value of photoresistor { if (i < 40) { // stream , constant power m = m + 1; delay(80); if (m > 50) // drop , fluctuating power { y = y + 1; m = 0; break; } } else { m = 0; } } if (check == 0 && i == 40) // suppose the value of i is 60 in "if (check == HIGH && i == 60)". Let say the stream breaks at 20 and resumed at 21 then +1 vill be incremented in stream when the number reaches at m=81. 21+60=81. { if (distance > 100) { // photoresistor x = x + 1; delay (100); } } if (check == 1 && i > 2) { i = 0; delay(100); } Serial.print("m = "); Serial.print(m); Serial.print(" "); Serial.println(i); Serial.print(" "); Serial.println(check); Serial.print(" "); Serial.println(distance); Serial.print(" "); Serial.println(x); Serial.print(" "); Serial.println(y); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 10); display.print("Stream:"); display.setCursor(100, 10); display.print(x); display.setCursor(0, 40); display.print("Drop:"); display.setCursor(80, 40); display.print(y); display.display(); if (y == 2) // led for drop , fluctuating power { flag1 = 1; } if (flag1 == HIGH && plug1 == 1) { digitalWrite (led1, HIGH); flag1 = 0; } if (x == 5) // led for stream , constant power { flag2 = 1; } if (flag2 == HIGH && plug2 == 1) { digitalWrite (led2, HIGH); flag2 = 0; } if (rstcheck1 == 1){ digitalWrite (led1, LOW); flag1 = 0; plug1 = 0;} if (rstcheck2 == 1){ digitalWrite (led2, LOW); flag2 = 0; plug2 = 0; } } }